Kaum einer hat seit dem Serienstart 2011 noch nicht von Game of Thrones gehört. Für die Wenigen, die noch nichts von den sieben Königslanden in Westeros mitbekommen haben, handelt es sich dabei um eine amerikanische Fantasy-Fernsehserie, nach den Büchern von George R. R. Martin. Die Serie handelt von den Machtkämpfen um den eisernen Thron, weiteren Bedrohungen, Morden, Intriegen und Verrat.
Ohne an dieser Stelle zukünftige Fans zu spoilern, hebt sich die Serie vor allem durch ihre Brutalität, Unverblühmtheit und dem Tod des ein oder anderen Hauptcharakters von anderen ab. In diesen durchweg brutalen Zuständen wird auch der ein oder andere vermeindliche Held zum Mörder. Doch was bringt ihn dazu ? Sind die Beziehungen zu anderen Charakteren und die eigene Position ausschlaggebend für dieses Verhalten?
Im Folgenden soll also der Zusammenhang zwischen der Bereitschaft zu töten und der Interaktionen der einzelnen Charaktere, sowie dessen Position zwischen den anderen Charakteren wissenschaftlich untersucht werden. Dazu wird eine Social Network Analyse durchgeführt, diese erfasst Beziehungen und Beziehungsstrukturen, bildet diese durch Knoten und Kanten ab, die anschließend grafisch visualisiert werden können. Diese Visualisierung und Analyse der Daten soll helfen die Fragestellung zu beantworten und Zusammenhänge hervorheben.
Zunächst müssen alle Packeges installiert werden, die im Folgenden für die Social Network Analyse benötigt werden.
# Output nicht anzeigen
# mit "message = FALSE" kann das printen des Packageladens verhindert werden
# Benötigte Packages:
# Alle Packeges werden nur einmal installiert
uP <- function(...) {
x <- list(...)
for(p in x) {
if (!is.element(p, installed.packages()[,1])) {install.packages(p,dep = TRUE, repos = "http://cran.wu.ac.at")}
library(p, character.only = TRUE)}
}
uP('knitr','tidyverse', 'gapminder', 'magick','tidygraph','ggthemes','gganimate', 'ggraph','gifski', 'gridExtra', 'plotly','tidylog')
library("tidyverse") # Laden von tidyverse um damit in diesem 'Environment' zu programmieren
Über Game of Thrones existiert eine Vielzahl an Daten. Für die Analyse werden Daten über die Charaktere und deren Beziehung untereinander, sowie Informationen über andere Charaktere, die von diesem Charakter getötet wurden, benötigt. Bei den Beziehungen soll es sich nicht um Daten wie Freundschaften oder Verwandschaft handeln, sondern um die Interaktionen zuwischen den Charakteren ungeachtet deren Motive. Damit können auch negative Beziehungen abgebildet werden, um die Stellung eines Charakters im sozialen Netzwerk zu anlysieren.
Besonders gut eignet sich dafür die Beziehungsliste, die von einem User über Github bereitgestellt wurde ( data-game-of-thrones-nodes&edges ). Eine Beziehungsliste stellt die Beziehung zwischen den Knoten spaltenweise dar und zählt beispielsweise deren Häufigkeit. Der User hat aus verschiedenen, von Fans erstellten Drehbuchskripte der Serie herausgelesen, wann und zwischen wem wie oft eine Interaktion stattfindet und diese in der Beziehungliste gespeichert.
Da diese Daten, durch das Analysieren der Drehbuchskripte, extra für den Zweck einer Analyse herausgelesen wurde, handelt es sich um custom-made Daten. Es handelt sich dabei um eine Gesamterhebung, da hier nicht auf einen Ausgangspunkt fokusiert wird. Ebenfalls handelt es sich nicht um ein Schneeball Netzwerk, da die Charaktere nicht nacheinander abgearbeitet werden und auf sich gegenseitig verweisen, sondern die Beziehungen beidseitig immer wieder zeitlich versetzt auftreten können. Namensgeneratoren sind dabei die Charaktere, die in den Skripten genannt werden. Mit einer Nennung hat ein Charakter auch automatisch eine Beziehung/Interaktion mit einem weiteren Charakter und wird damit ins Netz aufgenommen. Bei den Namensinterpretatoren handelt es sich um die Beziehungen der einzelnen Knoten. Diese werden dann über den Alogrigthmus des Git-Users aus den Skripten ermittelt, wenn zwei Namen von Charakteren miteinander auftauchen. Wie genau sich eine Beziehung definiert und wann diese gezählt wird, wird später genauer beschrieben, wenn auf die Kanten des Netzes eingegangen wird.
Adressiert werden die Charaktere über eine individuelle ID. Der User stellt neben der Beziehungsliste ebenfalls eine Liste der Charaktere der Serie bereit. Diese wird im Folgenden verwendet, da die identische ID-Bezeichung die Verbindung der Datensätze, zum erstellen eines Netzes, erleichtert. Allerdings müssen diese Daten noch durch einen anderen Datensatz, um Informationen über die Anzahl getöteter Charaktere ergänzt werden. Dazu werden Daten verwendet, die ein anderer User über Github zu verfügung stellt ( data-game-of-thrones-deaths) . Hierbei handelt es sich ebenfalls um custom-made Daten, da sie extra für diesen Zweck durch eine Gesamterhebung ermittelt wurden.
Mit dem Befehl read_csv() werden die Daten aus dem Data-Ordner mit relativen Pfaden importiert. Die relativen Pfade sorgen dafür, dass jeder Rechner auf die Daten zugreifen kann.
library('tidyverse') # basic data wrangling
library('tidygraph') # SNA
library('tidylog') # Verbose tidy code
library('ggraph') # Network Data Viz
# read_csv() importiert Nodes und Edges aus csv files:
df_deaths <- read_csv("data/game-of-thrones-deaths-data.csv") # erstellt aus geladener Datei ein Objekt, dass weiter verwendet werden kann
edgesS1 <- read_csv("data/got-s1-edges.csv")
edgesS2 <- read_csv("data/got-s2-edges.csv")
edgesS3 <- read_csv("data/got-s3-edges.csv")
edgesS4 <- read_csv("data/got-s4-edges.csv")
edgesS5 <- read_csv("data/got-s5-edges.csv")
edgesS6 <- read_csv("data/got-s6-edges.csv")
edgesS7 <- read_csv("data/got-s7-edges.csv")
edgesS8 <- read_csv("data/got-s8-edges.csv")
nodesS1 <- read_csv("data/got-s1-nodes.csv")
nodesS2 <- read_csv("data/got-s2-nodes.csv")
nodesS3 <- read_csv("data/got-s3-nodes.csv")
nodesS4 <- read_csv("data/got-s4-nodes.csv")
nodesS5 <- read_csv("data/got-s5-nodes.csv")
nodesS6 <- read_csv("data/got-s6-nodes.csv")
nodesS7 <- read_csv("data/got-s7-nodes.csv")
nodesS8 <- read_csv("data/got-s8-nodes.csv")
Um die Datensätze verbinden und analysieren zu können, müssen die Daten zuerst inspiziert werden.
# Aufbau der Daten analysieren um Cleaning-Bedarf festzulegen
df_deaths
## # A tibble: 6,887 × 11
## order season episode character_killed killer method method_cat reason
## <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 1 1 1 Waymar Royce White W… Ice sw… Blade Unknown
## 2 2 1 1 Gared White W… Ice sw… Blade Unknown
## 3 3 1 1 Will Ned Sta… Sword … Blade Deserting …
## 4 4 1 1 Stag Direwolf Direwo… Animal Unknown
## 5 5 1 1 Direwolf Stag Antler Animal Unknown
## 6 6 1 1 Jon Arryn Lysa Ar… Poison Poison Petyr Bael…
## 7 7 1 1 Dothraki man Dothrak… Arakh Blade A Dothraki…
## 8 8 1 2 Catspaw assassin Summer Direwo… Animal Attempting…
## 9 9 1 2 Mycah Sandor … Unknow… Unknown Joffrey ha…
## 10 10 1 2 Lady Ned Sta… Knife Blade Robert Bar…
## # … with 6,877 more rows, and 3 more variables: location <chr>,
## # allegiance <chr>, importance <dbl>
edgesS1
## # A tibble: 549 × 4
## Source Target Weight Season
## <chr> <chr> <dbl> <dbl>
## 1 NED ROBERT 192 1
## 2 DAENERYS JORAH 154 1
## 3 JON SAM 121 1
## 4 LITTLEFINGER NED 107 1
## 5 NED VARYS 96 1
## 6 DAENERYS DROGO 91 1
## 7 ARYA NED 90 1
## 8 CATELYN ROBB 90 1
## 9 BRONN TYRION 86 1
## 10 CERSEI NED 86 1
## # … with 539 more rows
nodesS1
## # A tibble: 126 × 2
## Id Label
## <chr> <chr>
## 1 ADDAM_MARBRAND Addam
## 2 AEGON Aegon
## 3 AERYS Aerys
## 4 ALLISER_THORNE Allister
## 5 ARYA Arya
## 6 ASSASSIN Assassin
## 7 BAELOR Baelor
## 8 BALON Balon
## 9 BARRISTAN Barristan
## 10 BENJEN Benjen
## # … with 116 more rows
#edgesS2
#nodesS2
#Inspektion der benötigten Spalten
# Überprüfen auf na werte bei killern
#sum(is.na(df_deaths$killer))
#Überprüfen ob jeder NAme eine ID hat
#sum(is.na(nodesS1$Label))
#sum(is.na(nodesS1$ID))
# Überprüfen ob Kanten ins leere führen
#sum(is.na(edgesS1$source))
#sum(is.na(edgesS1$target))
Im Folgenden werden für die Analyse zum Beantworten der Forschungsfrage Informationen über die Charaktere benötigt, wie deren Namen, die Anzahl deren Opfer und die Beziehungen zu den anderen Charakteren. Auf alle anderen Informationen kann verzichtet werden. Da diese Daten keine fehlenden Informationen oder andere Unstimmigkeiten aufweisen, können die benötigten Informationen im nächsten Schritt ohne weiteres Cleaning verbunden werden.
Aus der Inspizierung geht hervor, dass die Edge und Node Dfs in ihrer Bezeichung identisch sind, sodass diese einfach über einen Join-Befehl zusammengebracht werden können. Durch das verbinden der einzelnen Staffeln, kann die gesammte Serie analysiert werden. Ebenfalls sind die Daten so ausgewählt, dass sie über die identischen Ids einfach zu einem Netzwerk hinzugefügt werden können.
### Wie kann ich nur den code anzeigen aber nicht den Output
df_nodes = nodesS1 %>% # zusammenfassen der einzelnen Node dfs zu einem großen df mit join -> ermöglicht untersuchung der gesammten Serie
full_join(nodesS2) %>%
full_join(nodesS3) %>%
full_join(nodesS4) %>%
full_join(nodesS5) %>%
full_join(nodesS6) %>%
full_join(nodesS7) %>%
full_join(nodesS8)
df_edges = edgesS1 %>% # zusammenfassen der einzelnen Edge dfs zu einem großen df mit join
full_join(edgesS2) %>%
full_join(edgesS3) %>%
full_join(edgesS4) %>%
full_join(edgesS5) %>%
full_join(edgesS6) %>%
full_join(edgesS7) %>%
full_join(edgesS8)
Die Nodes enthalten nun alle Namen Charaktere der 8 Staffeln und eine ID, mit der die Charaktere in der Egdelist bezeichnet werden. Für die Analyse müssen die Knoten allerdings darüber hinaus noch die informationben enthalten wie viele Charaktere von dem entsprechenden Charakter im laufe der 8 Staffeln getötet worden sind. Aus den Einblick geht ebenfalls hervor, dass die Datensätze aus den unterschiedlichen Github-Datensätzen nicht über eine identische Spalte verbunden werden können. Beispielsweise wird Arya in den Nodes als Arya bezeichnet und in dem Datensatz dessen Informationen den einzelnen Charakteren zugeordnet werden sollen als Arya Stark. Um die Datensätze über eine identische bezeichung zu verbinden wird die Spalte des Namens in vor und Nachname aufgeteilt. Über den Vornamen eines Charakters wird dann die berechnete Rate der getöteten Charaktere dem Knoten zugeordnet.
# Anpassung des Labels, damit die Daten über eine identische Spalte zu dem entsprechenden Knoten zugeordnet werden kann
library(tidyr)
df_deaths <- df_deaths %>% separate(killer, c('Label', 'Surname')) #Aufteilung der Spalte killer in Label und Surname anhand des Leerzeichens
#Zählen der getöteten Charaktere
killrate <- df_deaths %>%
count(Label) # Morde mit dem gleichen Label (Vorname des Killer) werden zusammengefasst und deren Anzahl festgehalten
killrate # überprüfung der Ergebnisse
## # A tibble: 129 × 2
## Label n
## <chr> <int>
## 1 Accident 1
## 2 Allister 3
## 3 Amory 1
## 4 Arryn 12
## 5 Arthur 3
## 6 Arya 1278
## 7 Baelish 1
## 8 Baratheon 56
## 9 Barristan 16
## 10 Benjen 23
## # … with 119 more rows
colnames(killrate) <- c("Label", "kills") # Umbenennung der Spalten
df_nodes_wk <- merge( df_nodes, killrate,by="Label") # Killrate wird über identische Labelspalte zu dem entsprechenden Knoten zugeordnet (wk = withkillrate)
df_nodes_wk #überprüfung der ergebnisse
## Label Id kills
## 1 Allister ALLISER_THORNE 3
## 2 Amory AMORY 1
## 3 Arthur ARTHUR 3
## 4 Arya ARYA 1278
## 5 Barristan BARRISTAN 16
## 6 Benjen BENJEN 23
## 7 Beric BERIC 30
## 8 Brienne BRIENNE 28
## 9 Bronn BRONN 27
## 10 Catelyn CATELYN 1
## 11 Cersei CERSEI 199
## 12 Daario DAARIO 25
## 13 Daenerys DAENERYS 24
## 14 Dickon DICKON 1
## 15 Eddison EDDISON_TOLLETT 3
## 16 Ellaria ELLARIA 2
## 17 Euron EURON 12
## 18 Gendry GENDRY 9
## 19 Gregor MOUNTAIN 10
## 20 Grenn GRENN 2
## 21 Hodor HODOR 4
## 22 Ilyn ILYN_PAYNE 1
## 23 Jaime JAIME 23
## 24 Janos JANOS 1
## 25 Jaqen JAQEN 4
## 26 Jeor JEOR 1
## 27 Joffrey JOFFREY 1
## 28 Jon JON 116
## 29 Jorah JORAH 65
## 30 Jory JORY_CASSEL 3
## 31 Karl KARL_TANNER 2
## 32 Karsi KARSI 9
## 33 Leaf LEAF 37
## 34 Locke LOCKE 2
## 35 Loras LORAS 4
## 36 Lothar LOTHAR 2
## 37 Lyanna LYANNA 1
## 38 Lysa LYSA 1
## 39 Magnar MAGNAR 3
## 40 Meera MEERA 6
## 41 Melisandre MELISANDRE 8
## 42 Meryn MERYN_TRANT 1
## 43 Mossador MOSSADOR 1
## 44 Ned NED 5
## 45 Nymeria NYMERIA 1
## 46 Obara OBARA 2
## 47 Olenna OLENNA 1
## 48 Olly OLLY 1
## 49 Osha OSHA 2
## 50 Petyr LITTLEFINGER 1
## 51 Podrick PODRICK 5
## 52 Polliver POLLIVER 1
## 53 Qhorin QHORIN 1
## 54 Qhorin QHORIN_HALFHAND 1
## 55 Qyburn QYBURN 2
## 56 Ramsay RAMSAY 15
## 57 Rast RAST 1
## 58 Robb ROBB 3
## 59 Rodrik RODRIK 2
## 60 Roose ROOSE_BOLTON 1
## 61 Sally SALLY 1
## 62 Sam SAM 7
## 63 Sandor HOUND 59
## 64 Sansa SANSA 1
## 65 Selyse SELYSE 1
## 66 Stannis STANNIS 9
## 67 Styr STYR 8
## 68 Theon THEON 34
## 69 Tommen TOMMEN 1
## 70 Tormund TORMUND 66
## 71 Tyene TYENE 5
## 72 Tyrion TYRION 5
## 73 Yara YARA 12
## 74 Ygritte YGRITTE 14
## 75 Yoren YOREN 5
df_edges
## # A tibble: 4,110 × 4
## Source Target Weight Season
## <chr> <chr> <dbl> <dbl>
## 1 NED ROBERT 192 1
## 2 DAENERYS JORAH 154 1
## 3 JON SAM 121 1
## 4 LITTLEFINGER NED 107 1
## 5 NED VARYS 96 1
## 6 DAENERYS DROGO 91 1
## 7 ARYA NED 90 1
## 8 CATELYN ROBB 90 1
## 9 BRONN TYRION 86 1
## 10 CERSEI NED 86 1
## # … with 4,100 more rows
Um aus diesen Daten ein soziales Netzwerk erstellen zu können, müssen als erstes die Akteure, die sogenannten Knoten des Netzes, festgelegt werden. Die Akteure sind in den Game of Thrones Daten die Charaktere wie Jon, Daenerys, Arya und Cersei. Diese sozialen Akteure haben verschiedene Merkmale, wie ihren Namen oder Anzahl der von ihnen getöteten Personen. Die Beziehungen der Akteure, die sogenannten Kanten, verbinden diese. Die Kanten gehen aus den Daten hervor wie oft zwei Akteure miteinander interagiert haben. Eine Interaktion wurde verzeichnet, wenn zwei Charaktere direkt miteinander sprechen, übereinander sprechen, kurz hintereinander genannt werden oder in der selben Szene auftauchen. Damit ist die Beziehung immer auf Gegenseitigkeit bezogen und hat damit keine Richtung, sie gilt also als ungerichtet. Die Kante spiegelt also wieder, wie oft die Knoten miteinander interagiert haben. Die Beziehungen werden durch die Kanten vergleichend in ihrer Häufigkeit bewertet, damit wird die Kante als gewichtet bezeichnet. Auf diesen Wert der Häufigkeit wird in der Darstellung nicht eingegangen, da dieser nicht zum Beantworten der Fragestellung beiträgt.
Sind Kanten und Knoten nun definiert, kann das Netz erstellt werden.
net <- as_tbl_graph(df_edges) #Erstellt einen Table-Graph (Netzwerk) mit dem Namen net, dem Kanten zugewiesen werden
net <- net %N>% left_join(df_nodes_wk %>% rename(name = Id), by = "name") #dem Netz werden ebenfalls die Knoten zugewiesen/ ID wird in Name umbenannt
Das Netz, bestehend aus Kanten und Konten kann nun visualisiert werden. Anschließend wird die Visualisierung so gestaltet, dass die Attribute, wie in diesem Fall die getöteten Charaktere, ebenfalls abbildet sind. Dazu sollen die Knoten sich mit steigender Anzahl vergrößern.
# ChunkOutput mittig ausgeben & große Plots
#Netzwerk nur mit Verbindungen plotten
#Netzwerk plotrten
net %>% # erste Visualisierung des Netzwerks durch ggraph
ggraph( layout = "stress") +
geom_node_point() +
geom_edge_link( alpha = 0.1, edge_colour = "royalblue") +
geom_node_text(aes(label = Label), repel = TRUE,
point.padding = unit(0.1, "lines"))
#Netzwerk mit Killattribut darstellen
library(plotly)
net %>% # erste Visualisierung des Netzwerks durch ggraph
ggraph( layout = "stress") +
geom_edge_link( alpha = 0.05, edge_colour = "royalblue") +
geom_node_point(
aes(size = kills)) +
scale_size(range = c(1,8)) + # currently under construction - send help
geom_node_text(aes(label = Label), repel = T,
point.padding = unit(0.1, "lines"))
#plot %>% ggplotly(tooltip="Lable") # %>% toWebGL() -> funktioniert nicht mit ggraph, da geom_GeomEdgePath() has yet to be implemented in plotly - > keine Tooltips möglcih
# Daher wurde die größe angepasst um möglichst viele Labels zu lesen
In den Plots sind nun die Knoten, also die Charaktere aus der Serie Game of Thrones, und deren Interaktionen untereinander, die sogenanten Kanten, visualisiert. Dabei rücken Charaktere, die mit vielen anderen interagieren in die Mitte der Darstellung, während Charaktere, die nur vereinzelte Kontakte haben, am Rand eingezeichnet sind. Die Größe der Knoten gibt anschließend Aufschluss darüber, wie viele andere Charaktere von einem Charakter getötet wurden. Der Charakter Arya hat demnach die meisten Opfer, gefolgt von Jon, Cersei und Jaime. Ebenfalls zu beobachten ist, dass sich die Charaktere mit den größten Opferzahlen in der Mitte des Netzes befinden und damit mit den meisten Anderen in Kontakt stehen.
Dieses Netz kann nun weiter analysiert werden. Im Sinne der Sozial Kapital Theorie kann Kapital als Ressource wie Macht verstanden werden, zu der man über Beziehungen Zugang hat. Beziehungen können also als Ressource veranstanden werdem, auch in der Serie wird immer wieder deutlich, wie nicht nur Materielles eine Rolle spielt, sondern wie wichtig loyale Verbündete sind und wie selten diese mit jeder Staffel werden … Analysiert man also die Beziehungen der Knoten, können die Ergebnisse Aufschluss darüber geben, wer die Autoritätspersonen sind oder wer die größte Kontrolle hat. Diese Zentrlitätsmaße können gemessen und in die Darstellung des Netzes integriert werden. Man unterscheidet zwischen Degree (Wer hat die meisten Kontakte?), Closeness (Wer hat den direktesten Zugang zu anderen Gruppen?), Betweenness (Wer hat die größte Kontrolle?) und Authority (Wer hat die einflussreichsten Freunde?). All diese Aspekte sind im Machtspiel um den Eisernen Thron zentrale Erfolgsfaktoren. Doch bringen diese Eigenschaften der Koten auch die Brutalität mit sich, andere zu töten ? Genau um dieser Frage nachzugehen werden die Zentralitätsmaße in das Netz integriert, um Zusammenhänge zu identifizieren und darzustellen.
Dazu müssen die Zentralitätsmaße für jeden Knoten berechnet werden. Für diese Berechnungen werden Formeln verwendet, die bestimmte Annahmen über das Netz treffen. Man unterscheidet verschiedne Arten wie Dinge durch das Netz fließen. Bei dem Game of Thrones Netz handelt es sich dabei um Interaktionen zwischen Charakteren. Ein Charakter kann mit verschiedenen Charakteren interagieren. Ein Knoten kann also mehrfach besucht werden. Ebenfalls kann eine Verbindung der Charaktere, also die Kante mehrfach durchlaufen werden, da eine Interaktion, wie oben im Abschnitt über die Datenherkunft erläutert, immer beidseitig ist. Ebenfalls kann eine Interaktion mehrmals erfolgen. Deshalb handelt es sich bei der Flowstruktur um einen Walk, bei dem sowohl Knoten als auch Kanten mehr als einmal besucht werden können. Für ein Netz mit Walk-Flows können mehrere Zentralitätsmaße berechnet werden, dazu zählen Closness, Degree und Authority. Betweenness kann an dieser Stelle nicht verwendet werden, da die Flows hierbei immer dem kürzesten Pfad folgen müssten, dies ist bei den Interaktionen zwischen den Charakteren nicht der Fall.
Beispielhaft wird im Folgenden der Prozess durchlaufen, wie die Zentralitätsmaße berechnet und als Attribut der Knoten zum Netz hinzugefügt wird. Diese zusätzlichen Daten werden ebenfalls in der Visualisierung dargestellt, indem sich die Ausprägung des Zentralitätsmaßes über die Färbung der Knoten ablesen lässt.
### Wie kann ich nur den code anzeigen aber nicht den Output
net_degree <- net %>% #Netz wird im Folgenden überarbeitet
activate(nodes)%>% #Knoten werden aktiviert
mutate(
degree = centrality_degree() #Die auhority-centrality des Netzwerkes wird für jeden Knoten berechnet und gespeichert
)
net_degree %E>%
as.data.frame() %>%
select(from,to) %>%
unique
# Beziehungen + Kills + Centrality visualisieren
net_degree_vis <- net_degree %>% # erste Visualisierung des Netzwerks durch ggraph
ggraph( layout = "stress") +
geom_edge_link( alpha = 0.05, edge_colour = "dimgray") +
geom_node_point(
aes(size = kills, colour = degree)) +
scale_size(range = c(1,20)) +
scale_colour_distiller(palette = "Spectral") +
geom_node_text(aes(label = Label), repel = TRUE,
point.padding = unit(0.1, "lines"))
net_degree_vis
# nur die Killer und deren Position
net_degree_vis_red <- net_degree %>% # erste Visualisierung des Netzwerks durch ggraph
ggraph( layout = "stress") +
geom_node_point(
aes(size = kills, colour = degree)) +
scale_size(range = c(1,20)) +
scale_colour_distiller(palette = "Spectral") +
geom_node_text(aes(label = Label), repel = TRUE,
point.padding = unit(0.1, "lines"))
Die Visualisierung stellt nun die zuvor erstellten Beziehungen der Charaktere untereinander dar, wie auch die Anzahl der getöteten Charaktere, anhand der Größe der Knoten. Durch die Anpassung der Farbe der Knoten mit einer Skala wird die Ausprägung des Zentralitätsmaßes Degree widergespiegelt. Eine rote Färbung entspricht einer ausgeprägten Degree-Zentralität und bedeutet für den entsprechenden Knoten, dass dieser im Verhältnis zu den Übrigen die meisten Kontakte hat. Die deutlichste Rotfärbung ist bei den größten Knoten zu beobachten, was auf einen Zusammenhang zwischen der Anzahl der getöteten Charktere und der Anzahl der Kontakte des Mörders hinweist.
Nun können nach dem gleichen Vorgehen die anderen Zentralitätsmaße berechnet und visualisiert werden. Ausgangspunkt dafür ist immer das gleiche Netzwerk, weshalb auf die Darstellung der Kanten an dieser Stelle verzichtet wird. Anhand der Zentralitätsmaße und der Verteilung in der Visualisierung kann allerdings auf die Interaktionen geschlossen werden. Doch der Fokus soll auf dem Zusammenhang zwischen den getöteten Charakteren und den Zentralitätsmaßen liegen.
par(mar = c(4, 4, .1, .1)) #Darstellung von je 2 Plots nebeneinander
net_degree_vis_red
net_closeness_vis_red
net_authority_vis_red
Hat ein Charakter nun die höchste Ausprägung eines Zentralitätsmaßes, ist dieses rot eingefärbt. Wenn ein Zusammenhang zwischen den getöteten Charakteren und dem Zentralitätsmaß bestehen würde, müssten sich die größten Knoten ebenfalls durch eine rote Färbung auszeichenen. Entsprechend müsste sich die Größe der Knoten identisch mit der Färbung verändern. Ähnlich wie bei der soeben betrachteten Degree-Zentralität, lässt sich durch die großen roten Knoten ein Zusammenhang zwischen der Closeness-Zentralität und der Anzahl der getöteten Charaktere vermuten. Das würde bedeuten, dass die Killer mit den meisten Opfern den direktesten Zugang zu ihren Kontakten gegenüber anderen Charakteren haben. Ein Zusammenhang zwischen der Authority-Zentralität und der Anzahl der Opfer ist nicht zu vermuten, die starken Ausprägungen des Zentralitätsmaßes befinden sich nicht unter den größten Knoten. Der Einfluss auf andere Charaktere ist demnach keine auszeichnende Eigenschaft der Killer aus Game of Thrones.
Um diesem Ansatz nun nocheimal zu überprüfen und darszustellen, soll im Folgenden die Kovarianz zwischen den Attributen der Knoten (Killrate und Zentralitätsmaß) betrachtet werden. Kovarianz ist ein Maß für die Assoziation zwischen zwei Variablen. Je mehr die Kovarianz von 0 (Null) abweicht, umso deutlicher ist die lineare Beziehung zwischen den beiden Variablen. (Quelle)
par(mar = c(4, 4, .1, .1)) #Darstellung von je 2 Plots nebeneinander
library(readr)
library(ggplot2)
ggplot(as.data.frame(net_degree), aes(kills, degree)) + geom_point() + geom_smooth(method=lm)
ggplot(as.data.frame(net_closeness), aes(kills, closeness)) + geom_point() + geom_smooth(method=lm)
ggplot(as.data.frame(net_authority), aes(kills, authority)) + geom_point() + geom_smooth(method=lm)
Je größer der Zusammenhang zwischen zwei Variablen, desto steiler ist die gezeichnete Funktion, die die Korrelation darstellt. Ist diese Steigung positiv, besteht ein positiver Zusammenhang, das Ansteigen der einen Variable wirkt sich ebenfalls auf die andere aus. Ein solcher positiver Zusammenhang ist wie vermutet bei den Zentralitätsmaßen Degree und Closeness zu erkennen. Bei der Authority dagegen ist nur eine leichte negative Steigung zu beobachten und deutet daher nicht auf einen Zusammenhang der Variablen hin.
Zusammenfassend lässt sich durch die dargestellten Untersuchungen sagen, dass sich die Killer mit den höchsten Opferzahlen aus Game of Thrones durch viele und enge Kontkate zu anderen Charakteren auszeichenen. Es konnte beobachtet werden, dass eine stärkere Ausprägung der Eigenschaften mit einer höheren Opferzahl in Verbindung gebracht werden kann. Im Gegenteil dazu beeinflusst das Einflussreichtum eines Charakteres die Höhe dessen Opferzahl nicht. Hiermit lässt sich nun auch die zuvor gestellte Forschungsfrage beantworten, die Beziehungen zu anderen Charakteren und die Stellung des Charakters/Knotens im Netz ist ausschlaggebend für dessen Verhalten und dessen Bereitschaft anderen Charakteren ein Ende zu setzen.